{
 "cells": [
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Poromechanics\n",
    "In this tutorial we will run a multiphysics simulation consisting of fully coupled single phase flow and mechanics.\n",
    "\n",
    "In the [single phase flow tutorial](./single_phase_flow.ipynb), we introduced \n",
    "the concept of constructing a simulation model from several mixin classes using \n",
    "multiple inheritance in Python.\n",
    "This approach allows us to keep the code modular and reuse some of the mixins in newly\n",
    "defined models.\n",
    "\n",
    "The benefits of this approach become clear when we want to define a multiphysics\n",
    "model. To achieve that, it is usually enough to combine existing mixins properly.\n",
    "We will illustrate that by assembling a poromechanics model from the mixins designed \n",
    "separately for the single phase flow model and the mechanics model. \n",
    "\n",
    "For this, we will first define two single-physics models: one for mechanics and one for single phase flow. Then, we will combine them into one poromechanics model. \n",
    "\n",
    "Note that there is already a poromechanics model in PorePy, so what we demonstrate here in this tutorial is not building the entire model from scratch.\n",
    "It is rather modifying two single-physics models, and then combining them to modify the coupled model."
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Mechanics model"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Here, we will run the single-physics problem of solid elasticity without any flow.\n",
    "The mathematical formulation of this problem in the porous matrix is:\n",
    "\n",
    "$$ \\nabla \\cdot \\sigma + F = 0 $$\n",
    "$$ \\sigma = C : \\frac{1}{2} (\\nabla u + (\\nabla u)^T ) $$\n",
    "\n",
    "where $F$ is the body force, $\\sigma$ is the stress tensor, $C$ is the 4th order tensor \n",
    "and $u$ is the displacement.\n",
    "The fracture deformation equation can be found in the article [Berge et al. 2019](https://onlinelibrary.wiley.com/doi/full/10.1002/nme.6238). \n",
    "Note that in the code, we use a nondimensionalized contact traction variable for the fracture deformation.\n",
    "\n",
    "In the example problem, we apply the zero Dirichlet boundary condition to each boundary.\n",
    "This boundary condition is provided by default in the base model class, so we will not\n",
    "modify it. Now, we will define a mixin to add a body force to some cells in the center\n",
    "of the model:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import porepy as pp\n",
    "import numpy as np\n",
    "\n",
    "\n",
    "class BodyForceMixin:\n",
    "    nd: int\n",
    "    \"\"\"Ambient dimension.\"\"\"\n",
    "\n",
    "    units: pp.Units\n",
    "\n",
    "    solid: pp.SolidConstants\n",
    "\n",
    "    def body_force(self, subdomains: list[pp.Grid]) -> pp.ad.Operator:\n",
    "        units = self.units\n",
    "        vals = []\n",
    "        for sd in subdomains:\n",
    "            data = np.zeros((sd.num_cells, self.nd))\n",
    "\n",
    "            # We add the source only to the 2D domain and not the fracture.\n",
    "            if sd.dim == 2:\n",
    "                # Selecting central cells\n",
    "                cell_centers = sd.cell_centers\n",
    "                indices = (\n",
    "                    (cell_centers[0] > (0.3 / units.m))\n",
    "                    & (cell_centers[0] < (0.7 / units.m))\n",
    "                    & (cell_centers[1] > (0.3 / units.m))\n",
    "                    & (cell_centers[1] < (0.7 / units.m))\n",
    "                )\n",
    "\n",
    "                acceleration = self.solid.convert_units(-9.8, \"m * s^-2\")\n",
    "                force = self.solid.density() * acceleration\n",
    "                data[indices, 1] = force * sd.cell_volumes[indices]\n",
    "\n",
    "            vals.append(data)\n",
    "        return pp.ad.DenseArray(np.concatenate(vals).ravel(), \"body_force\")"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Now we can combine our mixin with the standard model `MomentumBalance`. This time we will not define the geometry manually, but instead use one of the pre-defined geometries provided by a mixin class."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from porepy.applications.md_grids.model_geometries import (\n",
    "    SquareDomainOrthogonalFractures,\n",
    ")\n",
    "from porepy.models.momentum_balance import MomentumBalance\n",
    "\n",
    "\n",
    "class MomentumBalanceGeometryBC(\n",
    "    BodyForceMixin,\n",
    "    SquareDomainOrthogonalFractures,\n",
    "    MomentumBalance,\n",
    "):\n",
    "    \"\"\"Adding geometry and modified boundary conditions to the default model.\"\"\"\n",
    "\n",
    "    def meshing_arguments(self) -> dict:\n",
    "        cell_size = self.solid.convert_units(0.125, \"m\")\n",
    "        return {\"cell_size\": cell_size}\n",
    "\n",
    "\n",
    "model = MomentumBalanceGeometryBC()\n",
    "pp.run_time_dependent_model(model)\n",
    "pp.plot_grid(\n",
    "    model.mdg,\n",
    "    vector_value=model.displacement_variable,\n",
    "    rgb=[1, 1, 1],\n",
    "    figsize=(10, 8),\n",
    "    linewidth=0.3,\n",
    "    title=\"Displacement\",\n",
    ")"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Single phase flow model\n",
    "\n",
    "We have seen how to modify boundary condition and source for the single phase flow model\n",
    "in the [earlier tutorial](./single_phase_flow.ipynb).\n",
    "For this example we will repeat this process by setting the boundary condition:\n",
    "* Zero Dirichlet on the north boundary\n",
    "* Zero Neumann (no flux) everywhere else\n",
    "\n",
    "And we will again set the fracture inlet source."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [],
   "source": [
    "class PressureSourceBC:\n",
    "    def bc_type_darcy_flux(self, sd: pp.Grid) -> pp.BoundaryCondition:\n",
    "        \"\"\"Assign Dirichlet boundary condition to the north boundary and Neumann\n",
    "        everywhere else.\n",
    "\n",
    "        \"\"\"\n",
    "        bounds = self.domain_boundary_sides(sd)\n",
    "        bc = pp.BoundaryCondition(sd, bounds.north, \"dir\")\n",
    "        return bc\n",
    "\n",
    "    def fluid_source(self, subdomains: list[pp.Grid]) -> pp.ad.Operator:\n",
    "        \"\"\"Assign fracture source.\"\"\"\n",
    "        # Retrieve internal sources (jump in mortar fluxes) from the base class\n",
    "        internal_sources: pp.ad.Operator = super().fluid_source(subdomains)\n",
    "\n",
    "        # Retrieve external (integrated) sources from the exact solution.\n",
    "        values = []\n",
    "        src_value: float = self.fluid.convert_units(0.1, \"kg * m^-3 * s^-1\")\n",
    "        for sd in subdomains:\n",
    "            if sd.dim == self.mdg.dim_max():\n",
    "                values.append(np.zeros(sd.num_cells))\n",
    "            else:\n",
    "                values.append(np.ones(sd.num_cells) * src_value)\n",
    "\n",
    "        external_sources = pp.wrap_as_dense_ad_array(np.concatenate(values))\n",
    "\n",
    "        # Add up both contributions\n",
    "        source = internal_sources + external_sources\n",
    "        source.set_name(\"fluid sources\")\n",
    "\n",
    "        return source"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Again, we combine our mixin with the standard model and using the standard mixin geometry:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAh8AAAHHCAYAAAAf2DoOAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8g+/7EAAAACXBIWXMAAA9hAAAPYQGoP6dpAABCXElEQVR4nO3de3RU5b3/8U8yycwQIIAGEoiBCAYQI8QmhUbLD/VE09pS6WorRQuYKrWFrKPOqhe8EJDW4KU0XRZFUcRj9YB6xPZUGorRnFaJixbMkZaLcksgkptcAgFymdm/P5DpiZkBJpPsvSfzfq21l84zzzP7O3uyZ748l71jDMMwBAAAYJJYqwMAAADRheQDAACYiuQDAACYiuQDAACYiuQDAACYiuQDAACYiuQDAACYiuQDAACYiuQDAACYiuQDQI974oknNHLkSDkcDmVlZUmS0tPTdeutt3bp9WJiYrRw4cJz1lu4cKFiYmK6tA8APYfkAwjBqlWrFBMT49/cbrdGjx6twsJC1dXVWR2eLf35z3/Wvffeq6uuukovvviiHn30UatDAmCxOKsDACLRI488oosvvlinTp3S+++/r2eeeUbr1q3TP/7xDyUkJFgdnq28++67io2N1QsvvCCn0+kv37lzp2Jj+fcPEI1IPoAu+OY3v6mcnBxJ0u23364LL7xQS5cu1e9//3vNmDEjYJvm5mb17dvXzDDDYhiGTp06pT59+oT1OvX19erTp0+HxEOSXC5XWK8LIHLxzw6gG1x77bWSpL1790qSbr31VvXr10+7d+/WDTfcoP79++uWW26RJPl8PpWUlOiyyy6T2+1WcnKy7rjjDh0+fLjDa/79739Xfn6+kpKS1KdPH1188cX68Y9/3KHO6tWrlZ2drf79+ysxMVGXX365fvOb3/ifDzbn4czw0b59+/xl6enp+va3v63169crJydHffr00bPPPitJOnLkiO666y6lpaXJ5XLpkksu0WOPPSafz3fW4xITE6MXX3xRzc3N/qGqVatW+ff35TkfXd2PJL3//vv66le/KrfbrVGjRvljB2A/9HwA3WD37t2SpAsvvNBf1t7ervz8fH3961/Xk08+6R+OueOOO7Rq1SoVFBTo3//937V371799re/1UcffaQPPvhA8fHxqq+v1/XXX6/Bgwfr/vvv18CBA7Vv3z69+eab/tff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",
      "text/plain": [
       "<Figure size 640x480 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from porepy.models.fluid_mass_balance import SinglePhaseFlow\n",
    "\n",
    "\n",
    "class PoromechanicsSourceBC(\n",
    "    PressureSourceBC,\n",
    "    SquareDomainOrthogonalFractures,\n",
    "    SinglePhaseFlow,\n",
    "):\n",
    "    \"\"\"Adding geometry, boundary conditions and source to the default model.\"\"\"\n",
    "\n",
    "    def meshing_arguments(self) -> dict:\n",
    "        cell_size = self.solid.convert_units(0.1, \"m\")\n",
    "        return {\"cell_size\": cell_size}\n",
    "\n",
    "\n",
    "model = PoromechanicsSourceBC()\n",
    "pp.run_time_dependent_model(model)\n",
    "pp.plot_grid(\n",
    "    model.mdg,\n",
    "    cell_value=model.pressure_variable,\n",
    "    figsize=(10, 8),\n",
    "    linewidth=0.25,\n",
    "    title=\"Pressure field\",\n",
    "    plot_2d=True,\n",
    ")"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Poromechanics\n",
    "\n",
    "Now we are ready to combine the mixins to define a poromechanics problem that is different from the default one.\n",
    "The modified poromechanics model takes the mechanics body source from the mechanics problem.\n",
    "From the flow problem it will inherit the flow boundary condition and source term."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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L1/Wrxs1apQAIP7973/r19XU1AgfHx/xwAMP6NelpKQIAGLTpk36dVVVVaJ3794CgPjhhx9uGM+ECROEvb29OHnypH7doUOHhEqlanKuevbsKeLi4vQ/BwcHi3Hjxt2wfN21//vf/65fp9Vqxbhx44RarRbFxcX69QBEYmKi/ufmzlV2dnaT87JkyRIBQGzdurXJ9lqtVgghxCeffCKUSqX4+eefG/0+LS1NABA7d+5sFIednV2j18P7778vAAgfHx9RUVGhX79gwYJGrx2tVituvvlmERMToz+27m8JDAwUY8aM0a/TvR4ff/zxRjHdf//9okuXLo3WOTk5NTr3RJ0dm4rIKNHR0ejatSv8/f3xyCOPwNnZGZ9//jn8/PwabffMM880+nnz5s1wc3PDmDFjUFJSol/CwsLg7OyMH374AQDg7u4OAPj6669RV1fXbAzu7u6oqqpq1ExhrMDAQMTExDSJeeTIkfDw8GgUc3R0NDQaDX766acblnltH5nKykqUlJRg5MiRqK6uxuHDhxtt6+zsjEcffVT/s1qtRkREBI4fP65fl56eDl9fXzz44IP6dY6OjvpP5jei0Wiwfft2TJgwAT169NCv79+/f5O/uznu7u74448/8Oeff7a67ezZs/Xf65piamtr8d1337W4z7Xnqq6uDufPn0fv3r3h7u6O/fv363/3//7f/0NwcDDuv//+JmXomgY3b96M/v37o1+/fo2um65ZU/da07nzzjsREBCg/zkyMhIA8MADD8DFxaXJet01ycnJwZ9//onJkyfj/Pnz+uNUVVXhzjvvxE8//dSkSfHpp59u9PPIkSNx/vx5VFRUtHhuiDo7NhWRUVatWoU+ffrAxsYG3t7e6Nu3b5PRJzY2NujevXujdX/++SfKy8vh5eXVbLnnzp0DAIwaNQoPPPAAXn75Zfzzn//E6NGjMWHCBEyePFnfYXTmzJnYtGkT7r77bvj5+WHs2LF4+OGHcdddd7X77woMDGyy7s8//8Rvv/2Grl273jDmlvzxxx9YtGgRvv/++yY3pvLy8kY/d+/evUmfHA8PD/z222/6n0+ePInevXs32a5v3743jAMAiouLcenSJdx8881Nfte3b1+kp6ffcP9ly5bhvvvuQ58+fTBo0CDcddddmDp1KoYMGdJoO6VSiV69ejVa16dPHwBotn+IzqVLl5Cc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",
      "text/plain": [
       "<Figure size 640x480 with 3 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from porepy.models.poromechanics import Poromechanics\n",
    "\n",
    "\n",
    "class PoromechanicsSourceBC(\n",
    "    PressureSourceBC,\n",
    "    BodyForceMixin,\n",
    "    SquareDomainOrthogonalFractures,\n",
    "    Poromechanics,\n",
    "):\n",
    "    \"\"\"Adding geometry, boundary conditions and source to the default model.\"\"\"\n",
    "\n",
    "    def meshing_arguments(self) -> dict:\n",
    "        cell_size = self.solid.convert_units(0.1, \"m\")\n",
    "        return {\"cell_size\": cell_size}\n",
    "\n",
    "\n",
    "model = PoromechanicsSourceBC()\n",
    "pp.run_time_dependent_model(model)\n",
    "pp.plot_grid(\n",
    "    model.mdg,\n",
    "    cell_value=model.pressure_variable,\n",
    "    vector_value=model.displacement_variable,\n",
    "    figsize=(10, 8),\n",
    "    title=\"Pressure and displacement\",\n",
    ")"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "You may notice that the base class `Poromechanics` is defined by combining several mixins:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "class Poromechanics(  # type: ignore[misc]\n",
      "    EquationsPoromechanics,\n",
      "    VariablesPoromechanics,\n",
      "    ConstitutiveLawsPoromechanics,\n",
      "    BoundaryConditionsPoromechanics,\n",
      "    SolutionStrategyPoromechanics,\n",
      "    pp.ModelGeometry,\n",
      "    pp.DataSavingMixin,\n",
      "):\n",
      "    \"\"\"Class for the coupling of mass and momentum balance in a mixed-dimensional porous\n",
      "    medium.\n",
      "\n",
      "    \"\"\"\n",
      "\n"
     ]
    }
   ],
   "source": [
    "import inspect\n",
    "\n",
    "\n",
    "print(inspect.getsource(Poromechanics))"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Each of these mixins is a combination of the flow and the mechanics mixins. For instance:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "class EquationsPoromechanics(\n",
      "    mass.MassBalanceEquations,\n",
      "    momentum.MomentumBalanceEquations,\n",
      "):\n",
      "    \"\"\"Combines mass and momentum balance equations.\"\"\"\n",
      "\n",
      "    def set_equations(self):\n",
      "        \"\"\"Set the equations for the poromechanics problem.\n",
      "\n",
      "        Call both parent classes' set_equations methods.\n",
      "\n",
      "        \"\"\"\n",
      "        mass.MassBalanceEquations.set_equations(self)\n",
      "        momentum.MomentumBalanceEquations.set_equations(self)\n",
      "\n"
     ]
    }
   ],
   "source": [
    "from porepy.models.poromechanics import EquationsPoromechanics\n",
    "\n",
    "\n",
    "print(inspect.getsource(EquationsPoromechanics))"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Thereby, the philosophy of multiple inheritance and mixins helps to modularize and reuse\n",
    " a significant part of code."
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# What we have explored\n",
    "We set up and ran a poromechanics simulation using the body force and source mixin classes originally designed for uncoupled problems."
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "porepy",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.12.1"
  },
  "orig_nbformat": 4
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
